/*
 * GestorEmpresaCliente.java
 *
 * Created on 23 de agosto de 2007, 14:15
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package gestores.administracion;

import bd.ConexionAvw;
import dal.EmpresaClienteDAL;
import excepciones.AvwException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import negocio.EmpresaClienteNegocio;
import negocio.Ubicacion;
import util.Utiles;

/**
 *
 * @author Administrador
 */
public class GestorEmpresaCliente {
    
    static final Logger logger = Utiles.iniciarLogger("GestorEmpresaCliente", false);
    
    public GestorEmpresaCliente() {
    }
     /**
      *Lista todas las empresas clientes 
      *@return ArrayList<HashMap> con los siguientes datos:
      *"eclCodigo"
      * "eclDescripcion"
      * "eclTelefono"
      * "eclCuit"
      * "eclMail"
      * "eclCalle"
      * "eclNumero"
      * "eclPiso"
      * "eclDpto"
      * "eclLocalidad"
      * "eclProvincia"
      * "eclPais"
      **/
    public static ArrayList<HashMap> listarEmpresaClientes() throws AvwException, NullPointerException {
        
        ArrayList<HashMap> empresaCliente = new ArrayList<HashMap>();

        for (EmpresaClienteNegocio empresa: EmpresaClienteDAL.listarEmpresaCliente()) {
            
            HashMap hash = new HashMap();
            
            hash.put("eclCodigo",empresa.getEclCodigo());
            hash.put("eclDescripcion",empresa.getEclDescripcion());
            hash.put("eclTelefono",empresa.getEclTelefono());
            hash.put("eclCuit",empresa.getEclCuit());
            hash.put("eclMail",empresa.getEclMail());
            hash.put("eclCalle",empresa.getEclCalle());
            hash.put("eclNumero",empresa.getEclNumero());
            hash.put("eclPiso",empresa.getEclPiso());
            hash.put("eclDpto",empresa.getEclDpto());
            hash.put("eclLocalidad",empresa.getEclLocalidad());
            hash.put("eclProvincia",empresa.getEclProvincia());
            hash.put("eclPais",empresa.getEclPais());                        
            
            empresaCliente.add(hash);            
        }
        return empresaCliente;
    }
    /**
      *Lista todas las empresas clientes 
      *@return ArrayList<HashMap> con los siguientes datos:
      *"eclCodigo"
      * "eclDescripcion"
      * "eclTelefono"
      * "eclCuit"
      * "eclMail"
      * "eclCalle"
      * "eclNumero"
      * "eclPiso"
      * "eclDpto"
      * "eclLocalidad"
      * "eclProvincia"
      * "eclPais"
      **/
    public static ArrayList<HashMap> listarEmpresasClientesFiltro(int opcionFiltro, String filtro) throws AvwException, NullPointerException {
        ArrayList<HashMap> arrayList = new ArrayList<HashMap>();
        
        try {
            logger.info("Llamo a listar empresas clientes");
            ArrayList<EmpresaClienteNegocio> empresas =                    
                    EmpresaClienteDAL.listarEmpresaClienteFiltro(opcionFiltro,filtro);
            for (EmpresaClienteNegocio empresa: empresas) {
                
                HashMap hash = new HashMap();
                hash.put("eclCodigo",empresa.getEclCodigo());
                hash.put("eclDescripcion",empresa.getEclDescripcion());
                hash.put("eclTelefono",empresa.getEclTelefono());
                hash.put("eclCuit",empresa.getEclCuit());
                hash.put("eclMail",empresa.getEclMail());
                hash.put("eclCalle",empresa.getEclCalle());
                hash.put("eclNumero",empresa.getEclNumero());
                hash.put("eclPiso",empresa.getEclPiso());
                hash.put("eclDpto",empresa.getEclDpto());
                hash.put("eclLocalidad",empresa.getEclLocalidad());
                hash.put("eclProvincia",empresa.getEclProvincia());
                hash.put("eclPais",empresa.getEclPais());   
                
                arrayList.add(hash);
            }
        } catch (AvwException e) {
            logger.log(Level.SEVERE, e.getMensaje(), e);
        }
        if(arrayList == null){throw new AvwException("Error.");}
        return arrayList;        
    }
    /** 
     * busca los datos de una empresa cliente 
     *return EmpresaCliente
     **/
    public static EmpresaClienteNegocio obtenerEmpresaCliente(String eclCodigo) throws AvwException{
        EmpresaClienteNegocio empresacliente = new EmpresaClienteNegocio();
        //obtiene los datos completos de la empresa cliebte
        empresacliente = EmpresaClienteDAL.obtenerEmpresaCliente(eclCodigo);        
        return empresacliente;     
    }
     /** 
     * busca los datos de una empresa cliente 
     *return EmpresaCliente
     **/
    public static EmpresaClienteNegocio obtenerEmpresaClientePorMail(String eclMail) throws AvwException{
        EmpresaClienteNegocio empresacliente = new EmpresaClienteNegocio();
        //obtiene los datos completos de la empresa cliebte           
        empresacliente = EmpresaClienteDAL.obtenerEmpresaClientePorMail(eclMail);
        return empresacliente;     
    }
    /**
     *Verifica si existe una empresa cliente con el mail ingresado.
     *Inserta una nueva empresa cliente.
     **/
     public static boolean insertarEmpresaCliente(String descripcion, String telefono,
             String cuit, String mail, String calle, String numero,
             String piso, String dpto, String eclLocalidad, 
             String eclProvincia, String eclPais) throws SQLException {
         
         EmpresaClienteNegocio empresaCliente = new EmpresaClienteNegocio();                 
         
        try {            
            if(EmpresaClienteDAL.obtenerEmpresaClientePorMail(mail).getEclCodigo() == null){
                
                empresaCliente.setEclDescripcion(descripcion);
                empresaCliente.setEclTelefono(telefono);
                empresaCliente.setEclCuit(cuit);
                empresaCliente.setEclMail(mail);
                empresaCliente.setEclCalle(calle);
                empresaCliente.setEclNumero(numero);
                empresaCliente.setEclPiso(piso);
                empresaCliente.setEclDpto(dpto);
                empresaCliente.setEclLocalidad(new Ubicacion(eclLocalidad));
                empresaCliente.setEclProvincia(new Ubicacion(eclProvincia));
                empresaCliente.setEclPais(new Ubicacion(eclPais));
                logger.info("Inserto la empresa cliente");
                EmpresaClienteDAL.insertarEmpresaCliente(empresaCliente);
                logger.info("Empresa cliente insertada");
                return true;                
            }
            return false;
        } catch (AvwException ex) {
            logger.log(Level.SEVERE, ex.getMensaje(), ex);
            return false;
        }                   
     }
    public static void eliminarEmpresaCliente(String codigo){    
    }
    /**
     *Modifica los datos de una empresa cliente ycontrola que el mail
     *ingrsado no se encuentre en la base de datos
     *return EmpresaClienteNegocio
     **/
    public static boolean modificarEmpresaCliente(String codigo,String descripcion, String telefono,
             String cuit, String mail, String calle, String numero,
             String piso, String dpto, String eclLocalidad, 
             String eclProvincia, String eclPais) throws SQLException, AvwException {
        
            EmpresaClienteNegocio empresaCliente = new EmpresaClienteNegocio();
            
        try {                                 
           if(EmpresaClienteDAL.obtenerEmpresaClientePorMail(mail).getEclCodigo().equals(codigo)){               
                empresaCliente.setEclCodigo(codigo);
                empresaCliente.setEclMail(mail);
                empresaCliente.setEclDescripcion(descripcion);
                empresaCliente.setEclTelefono(telefono);
                empresaCliente.setEclCuit(cuit);
                empresaCliente.setEclMail(mail);
                empresaCliente.setEclCalle(calle);
                empresaCliente.setEclNumero(numero);
                empresaCliente.setEclPiso(piso);
                empresaCliente.setEclDpto(dpto);
                empresaCliente.setEclLocalidad(new Ubicacion(eclLocalidad));
                empresaCliente.setEclProvincia(new Ubicacion(eclProvincia));
                empresaCliente.setEclPais(new Ubicacion(eclPais));
                logger.info("modifico la empresa cliente");
                if(EmpresaClienteDAL.modificarEmpresaCliente(empresaCliente)){
                    logger.info("Empresa cliente insertada"); 
                    return true;                                        
                }
              }
            return false;   
        } catch (AvwException ex) {
            ex.printStackTrace();
            return false;
        } catch (SQLException ex) {
            ex.printStackTrace();
            return false;
        }                                           
    }
}
